import pandas as pd
import os
import json

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 28],
        'City': ['New York', 'London', 'Paris'],
        'Salary': [50000, 60000, 55000]}
df = pd.DataFrame(data)

# 1. 基本用法：将 DataFrame 转换为 JSON 字符串
json_string = df.to_json()
print("1. 基本用法:\n", json_string)

# 2. 指定 orient 参数：
#    - 'index':  将索引作为键，每行数据作为值
json_string_index = df.to_json(orient="index")
print("\n2. orient='index':\n", json_string_index)

#    - 'columns': 将列名作为键，每列数据作为值
json_string_columns = df.to_json(orient="columns")
print("\n3. orient='columns':\n", json_string_columns)

#    - 'values':  仅输出值，不包含索引或列名
json_string_values = df.to_json(orient="values")
print("\n4. orient='values':\n", json_string_values)

#    - 'split':  将索引、列名和数据分开输出
json_string_split = df.to_json(orient="split")
print("\n5. orient='split':\n", json_string_split)

#    - 'records':  将每行数据转换为一个 JSON 对象，存储在列表中 (常用)
json_string_records = df.to_json(orient="records")
print("\n6. orient='records':\n", json_string_records)


# 3. 指定日期格式：
#    - date_format='iso':  将日期转换为 ISO 8601 格式
#    - date_format='epoch':  将日期转换为 Unix 时间戳
dates = pd.date_range('2023-01-01', periods=3, freq='D')
df['Date'] = dates
json_string_dates_iso = df.to_json(date_format='iso')
print("\n7. date_format='iso':\n", json_string_dates_iso)

json_string_dates_epoch = df.to_json(date_format='epoch')
print("\n8. date_format='epoch':\n", json_string_dates_epoch)


# 4. 指定数字精度：
#    - double_precision=2:  保留两位小数
df['Price'] = [10.12345, 20.56789, 30.90123]
json_string_precision = df.to_json(double_precision=2)
print("\n9. double_precision=2:\n", json_string_precision)


# 5. 指定文件路径：
#    - 将 JSON 数据写入到文件
output_dir = './data'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
    
output_file = os.path.join(output_dir, 'output.json')
df.to_json(output_file)
print(f"\n10. 写入到文件: {output_file}")

# 6. 处理非 ASCII 字符（使用 json 模块）
data_chinese = {'Name': ['张三', '李四', '王五'], 'Age': [25, 30, 28]}
df_chinese = pd.DataFrame(data_chinese)

# 将 DataFrame 转换为字典，然后使用 json 模块处理中文
chinese_dict = df_chinese.to_dict(orient='records')
json_string_ascii = json.dumps(chinese_dict, ensure_ascii=False, indent=2)
print("\n11. 使用 json 模块处理中文:\n", json_string_ascii)

# 7. 将中文数据保存到文件
chinese_output_file = os.path.join(output_dir, 'chinese_output.json')
with open(chinese_output_file, 'w', encoding='utf-8') as f:
    json.dump(chinese_dict, f, ensure_ascii=False, indent=2)
print(f"\n12. 中文数据写入到文件: {chinese_output_file}")